<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
  <script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
  <script src="../js/babel.js"></script>
</head>

<body>
  <div id="root"></div>
</body>

</html>

<script type="text/babel">

  /**
   * 1、以字符串的方式创建ref 这种方法不被官方采取了 通过this.refs.xxxx 可以取到你创建的ref
   * 2、以回调函数的形式创建ref 他会将这个元素作为参数返回给你(把ref 所在的当前节点传进去 至于怎么用就是你自己的事情)
   * 3、类的绑定的ref 通过一个API React.createRef() 他会创建一个容器给你 但是容器是单人单用的
   */
  class MyComponent extends React.Component {
    clickBtn = () => {
      alert(this.input1.value)
    }

    render() {
      return (
        <div>
          <input ref={(c) => this.input1 = c} type="text" />
          <button onClick={this.clickBtn}>显示表单中的内容</button>
        </div>
      )
    }
  }
  // 如果你是以回调的形式设置ref 注意：在数据变化时 他会调用两次 一次传给你null 他会将上次的ref清空 第二次后会传给你当前的元素

  class Demo2 extends React.Component {
    input1 = React.createRef()  // 创建一个容器 专人专用

    clickBtn = () => {
      alert(this.input1.current.value)
      console.log(this);
    }
    render() {
      return (
        <div>
          <input ref={this.input1} type="text" />
          <button onClick={this.clickBtn}>click me</button>
        </div>
      )
    }
  }

  ReactDOM.render(<Demo2 />, document.getElementById('root'))

</script>